#!/usr/bin/perl

use strict;
use warnings;
use Switch;

my $Pais = 'A';
my $CodigoSistema = '6'; #'[^;]*'
my $AnoContableDesde = '2012';
my $MesContableDesde = '6';
my $AnoContableHasta = '2013';
my $MesContableHasta = '1';

my $CONF_DIR = "grupo08/conf/InstalY.conf";

&Consulta($Pais,$CodigoSistema,$AnoContableDesde,$MesContableDesde,$AnoContableHasta,$MesContableHasta);


sub Consulta
{
	my($Pais,$CodigoSistema,$AnoContableDesde,$MesContableDesde,$AnoContableHasta,$MesContableHasta) = @_;
	# Leo del archivo de configuracion la variable MAE_DIR
	my $MesContableDesdeFormateado = sprintf("%02d", $MesContableDesde);
	my $FechaContableDesde = "${AnoContableDesde}${MesContableDesdeFormateado}01";
	my $MesContableHastaFormateado = sprintf("%02d", $MesContableHasta);
	my $FechaContableHasta = "${AnoContableHasta}${MesContableHastaFormateado}31";
	#print "$Pais,$CodigoSistema,$AnoContableDesde,$MesContableDesde,$AnoContableHasta,$MesContableHasta,$FechaContableDesde,$FechaContableHasta,";
	my $MAE_DIR = `grep '^MAEDIR' "$CONF_DIR" | cut -f2 -d'='`;
	chomp($MAE_DIR);
	my $MAE_FILE = "$MAE_DIR/PPI.mae";

	# 1. Filtro el archivo maestro
	my @FILTRO_MAE = `grep "^$Pais;$CodigoSistema;" "$MAE_FILE"`;
	#print @FILTRO_MAE;

	my @SALIDA;
	# 2. Calculo el monto restante de cada registro del maestro
	foreach my $regmae (@FILTRO_MAE)
	{
		# Verifico si el registro está dentro de las fechas válidas
		my %MaeActual;
		my @DatosMae = split(/;/,$regmae);
		my $Monto = 0;
		$MaeActual{Anio} = $DatosMae[2];
		$MaeActual{Mes} = sprintf("%02d",$DatosMae[3]);
		$MaeActual{Dia} = sprintf("%02d",$DatosMae[4]);
		$MaeActual{FechaContable} = "$MaeActual{Anio}$MaeActual{Mes}$MaeActual{Dia}";	

		if ($MaeActual{FechaContable} >= $FechaContableDesde && $MaeActual{FechaContable} <= $FechaContableHasta)
		{
			#print "$regmae";
			$MaeActual{Estado} = $DatosMae[5];
			$MaeActual{CodigoPrestamo} = $DatosMae[7];
			#$Monto = $Pres + $Impago + $Inde + $Innode - $Deb;
			chomp($DatosMae[9] = `echo $DatosMae[9] | sed 's/,/./'`);
			chomp($DatosMae[10] = `echo $DatosMae[10] | sed 's/,/./'`);
			chomp($DatosMae[11] = `echo $DatosMae[11] | sed 's/,/./'`);
			chomp($DatosMae[12] = `echo $DatosMae[12] | sed 's/,/./'`);
			chomp($DatosMae[13]);
			chomp($DatosMae[13] = `echo $DatosMae[13] | sed 's/,/./'`);
			$MaeActual{MontoRestante} = $DatosMae[9]+$DatosMae[10]+$DatosMae[11]+$DatosMae[12]-$DatosMae[13];
			#print %MaeActual;
			#print "\n";


			my %Prestamo = &ObtenerPrestamo($Pais,$MaeActual{CodigoPrestamo},$MaeActual{Anio},sprintf("%02d",$MaeActual{Mes}));
			#print %Prestamo;
			#print "\n";
			#print "MontoMae:$MaeActual{MontoRestante}\nMontoPrestamo:$Prestamo{MontoRestante}\nEstadoMae:$MaeActual{Estado}\nEstadoPrestamo:$Prestamo{Estado}\n";
			#print "Valido:$Prestamo{Valido}\n";

			if ($Prestamo{Valido} == 1)
			{
				my %Salida;
				$Salida{CodigoPrestamo} = $MaeActual{CodigoPrestamo};
				$Salida{CodigoCliente} = $Prestamo{CodigoCliente};
				$Salida{EstadoMaestro} = $MaeActual{Estado};
				$Salida{EstadoPrestamo} = $Prestamo{Estado};
				$Salida{MontoMaestro} = $MaeActual{MontoRestante};
				$Salida{MontoPrestamo} = $Prestamo{MontoRestante};
		
		
				# Comparo con el registro de prestamos ($prestamo_ok) -- Cuarto Paso --
				if (($MaeActual{Estado} eq "SMOR" && $Prestamo{Estado} ne "SMOR") || ($MaeActual{MontoRestante} < $Prestamo{MontoRestante}))
				{
					$Salida{Recomendacion} = "RECALCULO";
				}else{
					$Salida{Recomendacion} = "BUENO";
				}
				#print "$Recalculo\n";
				# Si recálculo == 1, agregar el registro a los resultados de la consulta
				push @SALIDA, {%Salida};
			}
		}
	}
	#print @SALIDA;
	#my $var = $SALIDA[3]{Estado};
	#print "var:$var\n";
	&MostrarResultados(@SALIDA);
}

sub MostrarResultados
{
	my(@SALIDA) = @_;
	my $arrSize = @SALIDA;
	#foreach my $reg (@SALIDA)
	for (my $i=0; $i < $arrSize; $i++)
	{
		#my $var = $SALIDA[$i]{CodigoPrestamo};
		#print "CodigoPrestamo:$var";
#		print "CodigoPrestamo:$reg{CodigoPrestamo},CodigoCliente:$reg{CodigoCliente}, EstadoMaestro:$reg{EstadoMaestro},EstadoPrestamo:$reg{EstadoPrestamo},MontoMaestro:$reg{MontoMaestro},MontoPrestamo:$reg{MontoPrestamo}\n";
		print "CodigoPrestamo:$SALIDA[$i]{CodigoPrestamo},CodigoCliente:$SALIDA[$i]{CodigoCliente}, EstadoMaestro:$SALIDA[$i]{EstadoMaestro},EstadoPrestamo:$SALIDA[$i]{EstadoPrestamo},MontoMaestro:$SALIDA[$i]{MontoMaestro},MontoPrestamo:$SALIDA[$i]{MontoPrestamo}\n";
	}
}

sub ObtenerPrestamo
{
	my($Pais,$CodigoPrestamo,$AnoContable,$MesContable) = @_;

	# 3. Obtengo registro del prestamos.pais
	# Leo del archivo de configuracion la variable MAE_DIR
	chomp(my $PROC_DIR = `grep '^PROCDIR' "$CONF_DIR" | cut -f2 -d'='`);
	my @FILTRO_PRESTAMO = `grep "^[^;]*;$AnoContable;$MesContable;[^;]*;[^;]*;$CodigoPrestamo;" "$PROC_DIR/PRESTAMO.$Pais"`;
	#print @FILTRO_PRESTAMO;
	#print "pais:$Pais,cod:$CodigoPrestamo,anio:$AnoContable,mes:$MesContable";

	# Obtengo el registro del PRESTAMO.PAIS
	my $FechaContableMaxima = 10000101;
	my $FechaProcesoMaxima = 10000101;
	my %Prestamo;
	$Prestamo{Valido}=0;
	foreach my $regpres (@FILTRO_PRESTAMO)
	{
		my %PrestamoActual;
		my @DatosPrestamo = split(/;/,$regpres);
		$PrestamoActual{Anio} = $DatosPrestamo[1];
		$PrestamoActual{Mes} = $DatosPrestamo[2];
		$PrestamoActual{Dia} = $DatosPrestamo[3];
		$PrestamoActual{FechaProceso} = DesformatearFecha($DatosPrestamo[14]);
		$PrestamoActual{FechaContable} = "$PrestamoActual{Anio}$PrestamoActual{Mes}$PrestamoActual{Dia}";
		$PrestamoActual{Estado} = $DatosPrestamo[4];
		chomp($PrestamoActual{MontoRestante} = `echo $DatosPrestamo[11] | sed 's/,/./'`);
		$PrestamoActual{CodigoCliente} = $DatosPrestamo[12];
		$PrestamoActual{Valido}=1;

		if ($FechaContableMaxima < $PrestamoActual{FechaContable} || ($FechaContableMaxima == $PrestamoActual{FechaContable} && $FechaProcesoMaxima < $PrestamoActual{FechaProceso}))
		{
			$FechaContableMaxima = $PrestamoActual{FechaContable};
			$FechaProcesoMaxima = $PrestamoActual{FechaProceso};
			# Guardo los datos del registro
			%Prestamo = %PrestamoActual;
		}
	}
	#print %Prestamo;
	return %Prestamo;
}

sub DesformatearFecha
{
	my($Fecha) = @_;

	my @ArrayFecha = split(/\//,$Fecha);
	my $Anio = $ArrayFecha[2];
	my $Mes = $ArrayFecha[1];
	my $Dia = $ArrayFecha[0];
	my $retFecha = "$Anio$Mes$Dia";

	return $retFecha;
}
